1. Technical Field
The present disclosure relates to directory operations and, more specifically, to a method and apparatus for handling directory operations.
2. Description of the Related Art
Directories are information services that provide users and applications with quick access to information. Directories are optimized for information retrieval. A directory server is a computer application that provides directory service to users and applications. One or more directory servers may be used to provide directory service to one or more users and/or applications. By utilizing additional directory servers, directory service may be simultaneously provided to a large number of users and/or applications. These directory servers may be located together or they may be distributed. Directory servers may be globally distributed and/or replicated to provide efficient directory service world-wide over a global computer network such as the internet.
X.500 is an international set of standards that defines directories. X.500 includes protocols for allowing users and applications to access directory service. Other protocols may also be used for allowing users and applications to access directory service. For example, LDAP, or the Lightweight Directory Access Protocol, is a string based protocol. Another example is Directory Services Markup Language (DSML) which is a variant of Extensible Markup Language (XML).
Directory protocols usually utilize TCP/IP transfer services or similar transfer services. Directory protocols may also include internal security features that may be useful for securing directory service access. Directory protocols are therefore well suited for providing access to directory service over the internet or private company intranets.
Users and applications may utilize directory services to gain access to one or more data objects. The data objects may have one or more attributes and the attributes may contain one or more values.
The hierarchical arrangement of directory information may provide for efficient searching. Hierarchical objects are commonly referred to as parent objects and child objects depending on their relationship to one another. For example, where a computer and a printer are represented as data objects, an object representing a printer may be the child of an object representing a computer.
The speed and efficiency of directories are important aspects of overall directory performance. Conventional methods for increasing directory performance involve increased use of hardware, software, or a combination of both hardware and software. For example, additional CPUs, disks, memory, directory server processes, etc. may be utilized in order to improve response times, latency in a replicated environment, and/or throughput or volume of operations, etc. However, while these conventional methods do improve performance, they do so at a high cost in terms of hardware, software, maintenance, and operations. For example, complex design and configuration, such as, routing, security, administrative controls, etc., may be involved in addition to complex management of the system, including network, host administration, directory monitoring, distribution, replication, backup and recovery, etc.
Protocols for accessing directories define multiple operations that a user and/or application may perform. These operations may be categorized into three groups: queries, updates and connections. Queries are operations for retrieving information from a directory. Query operations include “read” for reading data, “list” for listing data, “search” for searching for data and “compare” for comparing data. Update operations include “add” for adding data, “remove” for deleting data, “modify” for changing data and “ModifyDN” for changing the distinguished name associated with data, i.e. renaming data.
A query operation may include one or more sub-queries. For example, a query may include a Navigation sub-query.
Conventional methods of handling operations in a directory typically require access to data generally stored in a non-volatile form, such as on a disk. Because the speed at which data may be accessed from disks and other non-volatile forms may be limited, caches may be used to speed up the retrieval of information. Caches are areas of memory, generally volatile memory, that are used to store previously accessed information so that subsequent access attempts may be rapidly accessed from the cache without having to go back to the disk itself.
Caches are generally incremental caches, copying the most recently accessed information from the disk to the cache. Caches improve access speed because commonly accessed information is likely to have been placed in the cache from the last time that information was accessed. Unfortunately, incremental caches may take time to load commonly used information to the cache as information is only loaded into the cache as that information is accessed from the disk. Additionally, because it is not always clear when a cache is fully loaded or what types of information are stored in the cache, it might not be possible to effectively optimize operations such as queries for use with the cache. Additionally, if the sizes of the incremental caches are set too high, the stability of the caches may be reduced.
There are also time constraints associated with the incremental cache; for example, existing systems may handle at most only hundreds of operations per second. Customers of large organizations may demand greater throughput and speed of operations. For example, a directory operation that is evaluated may involve many time-consuming steps, such as, decoding the protocol, converting to SQL, interpreting the SQL, executing the SQL, handling by the disk cache buffers, and fetching the data.
Even though cache memory may provide improvements in the speed of directories, a cache typically operates as a buffer and has little, if any, high level intelligence about the nature of directory operations. In addition, a cache may manage low-level data read/write operations without necessarily understanding what the data is.
Accordingly, it would be beneficial to provide a reliable and effective way to quickly and efficiently process directory operations.